#------------------------------------------------------------>
ObjLoader
#------------------------------------------------------------>
#-----------------------------
Librairie pour PSP code par Nems

Version 1.0
Date du 09/03/2008 @ 23:30
Dbute le 27/12/2007 @ 19:20
#-----------------------------

#-----------------------------
Cette librairie permet :
-chargement de modle 3D exporter en <.obj>
-chargement des matriaux du fichier <.mtl> associ
-rendu pour architecture PSP-GU
-manipulation de la couleur des mesh

Amliorations prvues :
-systme de gestion des textures
-rendu pour architecture PSP-GL
#-----------------------------

#------------------------------------------------------------>
Structure, Classe, attirbuts et mthodes
#------------------------------------------------------------>
#-----------------------------
La librairie est oriente autour d'une classe : loaderObj.
	>Classe
	loaderObj
		>>Mthode
		bool loadFile(char *filename, bool useMtl, int vPf);
			Charge un fichier <.obj> d'adresse `filename`. L'argument `useMtl` prcise l'extraction des informations du <.mtl>.
			L'argument `vPf` prcise le nombre de vertex par face, c'est  dire 3(triangle) ou 4. Il est conseill de n'utiliser que des triangles.
			
		bool loadMtlFile(char *filename);
			Charge un fichier <.mtl> d'adresse `filename`.
			
		void setAllMeshColorFromKd();
			Dfinie la couleur de touts les meshs de l'objet selon la valeur de la couleur diffuse qui est donne par le matriel associ.
			
		void setMeshColor(mesh* me, unsigned int color);
			Dfinie la couleur d'un mesh.
		
		>>Attributs
		int stats[4];	//Mesh, Vertex, Faces, Material
			Statistiques. Dans l'ordre : nombre de mesh de l'objet, nombre total de vertex, nombre total de face, nombre de matriaux.
		
		int vPf;
			Nombre de vertex par face, c'est  dire 3(triangle) ou 4.
		
		mesh *meshList;
			Liste des mesh.
		
		mtl *mtlList;
			Liste des matriaux.
		
	>Structure
	Vertex
		>>Attributs
		unsigned int color;
			Couleur du vertex.
		
		float x, y, z;
			Coordonnes.
		
	mtl
		>>Attributs
		char name[64];
			Nom.
		float Ns;
		float Ka[3];
		float Kd[3];
		float Ks[3];
		float Tf[3];
		float Ni;
		float d;
		int illum;
			Informations relative au format mtl.
		
	mesh
		>>Attributs
		char name[64];
			Nom.
		Vertex __attribute__((aligned(16))) *v;
			Tableau de vertex des polygones du mesh.
		ScePspFVector3 *n;	// Normal values
			Tableau des normales associ  chaque polygones du mesh si prsente dans le <.obj>
		ScePspFVector2 *t;	// Texture Coordinates
			Tableau des coordonnes de texture associ  chaque polygones du mesh si prsente dans le <.obj>
		int my_stats[3]; //vertex, face, v*f
			Statistiques. Dans l'ordre : nombre de vertex, nombre de face, nb. face*nb. vertex
		mtl *material;
			Pointeur vers le matiriel associ.
		int smooth;
			Niveau du smooth.
		int mode;
			3 pour un mode en triangle, 4 pour un en quad.
		struct sMesh *next;
			Pointeur vers le mesh suivant.
#-----------------------------

#------------------------------------------------------------>
Principe
#------------------------------------------------------------>
#-----------------------------
Vous pouvez charger un fichier <.obj> dans une instance de classe loaderObj.
	::code
		loaderObj scene;
		scene.loadFile("arbre.obj", true, 3);
	::/code
	
Par la suite vous avez le choix de colorer les mesh selon la valeur de la couleur diffusante (car la couleur propre n'est pas gr dans les <.mtl>).
	::code
		scene.setAllMeshColorFromKd();
	::code
	
Il possible de contrler directement la couleur d'un mesh.
	::code
		scene.setMeshColor( scene.meshList, GU_COLOR( 1.0f, 0.0f, 0.0f, 1.0f));
	::code
Cette fonction est encore en dvellopement, elle devrait tre indpendante de la classe.

Pour le rendu du premier et du deuxime mesh.
	::code
		sceGumDrawArray( GU_TRIANGLES, GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D, scene.meshList->my_stats[1] * scene.meshList->mode, 0, scene.meshList->v);
		sceGumDrawArray( GU_TRIANGLES, GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D, scene.meshList->next->my_stats[1] * scene.meshList->next->mode, 0, scene.meshList->next->v);
	::code
	
Pour le rendu de tout les mesh.
	::code
		mesh *obj;
		for(obj=scene.meshList; obj; obj = obj->next)
			sceGumDrawArray( GU_TRIANGLES, GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D, obj->my_stats[1]*obj->mode, 0, obj->v);
	::code
#-----------------------------

#------------------------------------------------------------>
Remerciement
#------------------------------------------------------------>
 Xtreamlua.com et ses membres
http://xtreamlua.com

 Chou

 Hideo Kojima, l'artiste.

 Les jeux videos

 Le gas qui m'a appris  programmer ma TI-83 Plus pour tricher, et sans qui je n'crirais ptt pas a.

 Les crateurs de la PSP

 Les codeur de PSPLink et usbhostfs.

##########################################################################################################################################################################################